/**
 * Created On: Jul 11, 2012
 */
package com.athena.api.faculty;

import java.util.List;

import com.athena.dal.compositeEntities.FacultyRoutines;
import com.athena.dal.entities.Class;
import com.athena.dal.entities.Faculty;
import com.athena.dal.entities.Subject;
import com.athena.dal.entities.User;

/**
 * Base contract for faculty service.
 * 
 * @author Ashish Kumar Sinha <aksinha.mail@gmail.com>
 * Version 1.0
 */
public interface IFacultyService {
	
	public Faculty getFaculty(final int facultyId);
	
	/**
	 * get the list of all faculties from the particular department.
	 * If the department ID is not specified, fetch the list of all faculties in the school.
	 * 
	 * @param departmentId - the department Id or NULL.
	 * @return - if department id is not not null then the list of faculties in the department. Otherwise, all faculties of the school.
	 */
	public List<Faculty> allFaculties(final String departmentId);
	
	/**
	 * to get the list of subjects the faculty is teaching in the current academic year.
	 * @param facultyId
	 * @return
	 */
	public List<Subject> teaches(final int facultyId);
	
	/**
	 * to get the list of subjects which the faculty has taught in past academic years.
	 * @param facultyId
	 * @return - the list of subject.
	 */
	public List<Subject> hasTaught(final int facultyId);
	
	public Class classTeacherOf(final int facultyId);
	
	public List<FacultyRoutines> getRoutine(User user, long start, long end);
	
	
}
